#pragma once

#include <list>

#define AUTOLOCK
#define UNLOCK_WAITFORTIMEOUT_LOCK
#define NOTIFY

template <typename T>
class SyncQueue {
public:
    SyncQueue() {
    }

    virtual ~SyncQueue() {
    }

    void Enqueue(const T& obj) { //1
        AUTOLOCK;
        mList.push_back(obj);
        NOTIFY; //2
    }

    bool Dequeue(T& obj) {
        AUTOLOCK;
        if (mList.empty()) {
            UNLOCK_WAITFORTIMEOUT_LOCK;
        }
        if (mList.empty()) { //3
            return false;
        }
        obj = mList.front();
        mList.pop_front();
        return true;
    }

protected:
    std::list<T> mList;
};










1.当消费慢于生产时可能耗尽内存。
2.存在无效的通知。
3.防止被其它线程取走
